package main

import (
	"fmt"
)

func main() {
	
	c := Chinese{}
	greet(c)

	a := American{}
	greet(a)

	// 接口不能直接声明，但可以赋值
	// var s SayHello
	// s.sayHello()	// 报错
	var s SayHello = c
	s.sayHello()

	// 自定义接口实现接口,可以实现多个接口
	var i integer = 10
	var s2 SayHello = i
	var e Eat = i
	s2.sayHello()
	e.eat()


	// 多态数组
	var arr [3]SayHello 
	arr[0] = American{"jack"}
	arr[1] = Chinese{"张三"}
	arr[2] = Chinese{"李四"}

	fmt.Println(arr)

}


// 接口
type SayHello interface {
	sayHello()
}
type Eat interface {
	eat()
}

// 接口实现
type Chinese struct {
	name string
}
func (person Chinese) sayHello() {
	fmt.Println("你好")
}

type American struct {
	name string
}
func (person American) sayHello() {
	fmt.Println("hi")
}

// 定义函数,接受具备sayhello接口的变量
func greet(s SayHello) {
	s.sayHello()
}


type integer int

func (i integer) sayHello() {
	fmt.Println(i)
}
func (i integer) eat() {
	fmt.Println(i)
}